package com.atguigu06.polymorphism;

/**
 * ClassName: PersonTest
 * Description:
 *
 * @Author liu
 * @Create 2024/10/30 20:46
 * @Version 1.0
 */
public class PersonTest {
    public static void main(String[] args) {

        //多态性之前的场景：
        Person p1 = new Person();
        Man m1 = new Man();

        //多态性：子类对象的多态性
        Person p2 = new Man();
        /*
        多态性的应用：虚拟方法调用

        在多态的场景下，调用方法时。
            编译时，认为方法是左边声明的父类的类型的方法（即被重写的方法）
            执行式，实际执行的是子类重写父类的方法。
        简称为：编译看左边，运行看右边。
         */

        p2.eat();//运行看右边。Man();
        p2.walk();//调用方法，看右边

        //测试属性的是否满足多态性？不满足
        System.out.println(p2.id);//编译看左边 Person()


        //但无法调用Man()特有的方法与属性

        //p2.earnMoney();
        //System.out.println(p2.isSmoking);
    }
}
